//创建用户集合
// 引入mongoose 第三方模块
const mongoose = require('mongoose');
// 导入 bcrypt
const bcrypt = require('bcrypt');
//引入 Joi 模块
const Joi = require('joi')

//创建用户集合规则
const userSchema = new mongoose.Schema({
    username: {
        type: String,
        require: true,
        minlength: 2,
        maxlength: 20
    },
    email: {
        type: String,
        //保证邮箱地址在插入数据库时不重复
        unique: true
    },
    password: {
        type: String,
        require: true
    },
    // admin 超级管理员
    // normal 普通用户
    role: {
        type: String,
        require: true
    },
    state: {
        // 0 启动   1 禁用
        type: Number,
        default: 0
    }

})

//创建集合 返回的是集合的构造函数
const User = mongoose.model('User', userSchema)

// 添加用户函数
async function createUser() {
    const salt = await bcrypt.genSalt(10);
    const pass =await bcrypt.hash('123456', salt);

    // 创建一个用户集合  User.crete方法返回的是pormise 对象  
    const user = await User.create({
        username: '小毅',
        email: '183@qq.com',
        password: pass,
        role: 'admin',
        state: 0
    }).then(res => {
        console.log('用户创建成功');
    }).catch(res =>{
        console.log('用户创建失败');
    })
}
// createUser();


// Joi 是对javaScritpt对象的规则描述语言和验证器   
const validateUser = user => {
     // 定义对象规则
     const schema = {  
        username: Joi.string().min(2).max(12).required().error(new Error("username 验证不通过")),
        email: Joi.string().email().required().error(new Error('邮箱格式输入错误')),
        password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error('密码格式错误')),     //用户信息格式验证
        role: Joi.string().valid('normal', 'admin').required().error(new Error('role格式错误')),
        state: Joi.number().valid(0, 1).required().error(new Error('state 格式错误'))
    };
    return Joi.validate(user, schema);
}

module.exports = {
    User,
    validateUser
}